#include <iostream>

/*
    菱形继承 / 钻石继承：
        1、两个类继承自同一个父类，而又有了相同的子类。这样的继承结构就是菱形继承，又叫做钻石继承

    虚继承：
        为了解决菱形继承的时候命名冲突的问题，使得派生类中只保留一份相同的间接父类中的成员
*/

class Animal
{
public:
    int age{};
};

class Horse : public Animal
{
public:
    int a{};
};

class Donkey : public Animal
{
public:
    int b{};
};

class Mule : public Horse, public Donkey
{
    public:
    void display()
    {
        std::cout << Animal::age << std::endl;
    }
};

int main(int argc, char const *argv[])
{
    

    Mule mule{};

    // std::cout << mule.age << std::endl; // "Mule::age" is ambiguousC/C++(266) request for member ‘age’ is ambiguous
    std::cout << mule.Horse::age<< std::endl;
    std::cout << mule.Donkey::age<< std::endl;
    // std::cout << mule.Animal::age<< std::endl; // 这个是不行的


    return 0;
}
